#include "include.h"

/****************************************************************
 *This function is thread23
 *	(1)create socket,listen port,process command
 ****************************************************************/
void *thread23(void *str)
{	
    time_t		now ;
    struct		tm *tm_now ;
	ViChar		time_buf[100];
	ViChar		syslog_name[200];
	ViChar		store_dmesg[300];

	unsigned int temp_log_all_space, temp_log_use_space;
	unsigned int time_count = 0;

	// 日志存储使用的文件句柄
	int temp_log_store_fd = 0;

	// 提示信息
	fprintf(stderr,"thread twenty_three running\n");

	while(1){

		// 新建日志标志有效，则新建日志
		if(create_log_name_flag == FLAG_VALID){
			create_log_name_flag = FLAG_INVALID;

			// 判断剩余存储容量，确认是否可以创建文件
			time_count = 0;
			while(1){
				// 获取日志数据存储空间
				temp_log_all_space = get_disk_all_space((unsigned char *)PCM_LOG_PATH);
				temp_log_use_space = get_disk_use_space((unsigned char *)PCM_LOG_PATH);

				// log存储剩余容量足够大
				if((temp_log_all_space - temp_log_use_space - 3) > LOG_LEFT_LIMIT){
					break;
				}

				// 次数超次，的确存储容量不够
				time_count ++;
				if(time_count > 10){
					break;
				}
				usleep(100000);
			}
			
			// 启动创建日志文件
			if(time_count < 10){
				// 关闭旧日志存储文件
				if(log_store_fd > 0){
					// 纸存储标志无效
					temp_log_store_fd = log_store_fd;
					log_store_fd = 0;

					usleep(100000);

					// 关闭日志文件
					close(temp_log_store_fd);
					system("sync;sync;sync");	
					usleep(100000);				
				}

				// 清空局部变量
				memset(time_buf, 0x0, sizeof(time_buf));
				memset(syslog_name, 0x0, sizeof(syslog_name));

				// 获取本机时间
				time(&now) ;
				tm_now = localtime(&now) ;

				// 获取生成日志文件名中的时间部分
				sprintf(time_buf, "%d_%d_%d_%d_%d_%d", tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);

				// 生成日志文件名
				strcat(syslog_name, "/home/root/usr_log/sys_log_");
				strcat(syslog_name, time_buf);
				//fprintf(stderr,"%s\n", syslog_name);

				// 新建日志文件
				memset(store_dmesg, 0x0, sizeof(store_dmesg));
				strcat(store_dmesg, "touch ");
				strcat(store_dmesg, syslog_name);
				//fprintf(stderr,"%s\n", store_dmesg);
				system(store_dmesg);
				usleep(200000);

				// 将启动信息记录到日志中
				memset(store_dmesg, 0x0, sizeof(store_dmesg));
				strcat(store_dmesg, "dmesg > ");
				strcat(store_dmesg, syslog_name);
				//fprintf(stderr,"%s\n", store_dmesg);
				system(store_dmesg);
				usleep(200000);

				// 新建日志文件
				sys_log_store_len = 0;
				log_store_fd = open(syslog_name, O_RDWR | O_APPEND , 0666);
				usleep(100000);
			}
		}

		// 获取磁盘存储容量
		sleep(1);
	}
	
	return NULL;
}